import logging
from odoo.tools import groupby

from odoo import models, fields, api, _
from odoo.exceptions import UserError, ValidationError

_logger = logging.getLogger(__name__)


class EchartsActionDemo(models.Model):
    """示例模型
    """
    _name = 'echarts.action.demo'
    _description = '示例模型'

    name = fields.Char(string='名称')
    year = fields.Char(string='年份')
    ratio = fields.Char(string='比例')

    @api.model
    def get_echarts_bar_options(self):
        # 获取柱状图配置
        return {
            'legend': {},
            'tooltip': {},
            # 声明一个 X 轴，类目轴（category）。默认情况下，类目轴对应到 dataset 第一列。
            'xAxis': { 'type': 'category' },
            # 声明一个 Y 轴，数值轴。
            'yAxis': {},
            # 声明多个 bar 系列，默认情况下，每个系列会自动对应到 dataset 的每一列。
            'series': [{ 'type': 'bar' }, { 'type': 'bar' }, { 'type': 'bar' }]
        }

    @api.model
    def get_echarts_bar_dataset(self):
        # 函数返回的结果
        # {
        #     'source': [
        #         ['product', '2015', '2016', '2017'],
        #         ['Matcha Latte', 43.3, 85.8, 93.7],
        #         ['Milk Tea', 83.1, 73.4, 55.1],
        #         ['Cheese Cocoa', 86.4, 65.2, 82.5],
        #         ['Walnut Brownie', 72.4, 53.9, 39.1]
        #     ]
        # }
        # 从数据库取出数据后，转换成echarts使用的数据集（dataset）
        # dataset参考文档：https://echarts.apache.org/handbook/zh/concepts/dataset/
        # 按照产品名称对记录进行分组
        datas_groupby_name = groupby(self.search([]), key=lambda rec: rec['name'])
        source = [['product', '2015', '2016', '2017']]
        for name, recs in datas_groupby_name:
            source.append([name, *self.concat(*recs).sorted('year').mapped('ratio')])
        return {'source': source}
